package cn.genmer.test.security.designpatterns.observer;

import cn.genmer.test.security.designpatterns.observer.myobserver.CaiYunObserver;
import cn.genmer.test.security.designpatterns.observer.myobserver.HeFengObserver;
import cn.genmer.test.security.designpatterns.observer.myobserver.XiaoMiObserver;
import cn.genmer.test.security.designpatterns.observer.mysubject.WeatherData;

public class Client {
    public static void main(String[] args) {
        // 观察者模式下，模拟气象站新增去除订阅者

        // 先注册一个数据源（被观察者）
        WeatherData weatherData = new WeatherData();

        // 创建一个数据源使用方（观察者）
        XiaoMiObserver xiaoMiObserver = new XiaoMiObserver();

        // 调用方注册到数据源
        weatherData.registerObserver(xiaoMiObserver);
        // 更新数据，会通知到小米（目前只有小米）
        System.out.println("信息更新.通知订阅方！");
        weatherData.setData(10.2,28,36);


        // 新增一个观察者，只需要建立对应的实体类实现对应方法
        HeFengObserver heFengObserver = new HeFengObserver();
        weatherData.registerObserver(heFengObserver);
        // 这时候数据更新会通知小米、和风
        System.out.println("信息更新.通知订阅方！");
        weatherData.setData(15.2,17.9,3.26);

        // 跟小米解除订阅关系
        weatherData.removeObserver(xiaoMiObserver);
        System.out.println("信息更新.通知订阅方！");
        weatherData.setData(55,45,25);

        // 跟彩云天气建立合作
        CaiYunObserver caiYunObserver = new CaiYunObserver();
        weatherData.registerObserver(caiYunObserver);
        System.out.println("信息更新.通知订阅方！");
        weatherData.setData(55,27,0);
    }
}
